#!/usr/bin/env python3
"""
重建数据库脚本
Rebuild Database Script
"""
import os
import logging
import sys
from pathlib import Path

# 添加项目根目录到Python路径
sys.path.insert(0, str(Path(__file__).parent))

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


def rebuild_database():
    """重建数据库"""
    try:
        logger.info("🔧 重建数据库...")
        
        # 1. 删除现有数据库文件
        db_path = Path(__file__).parent / "data" / "campus_twin.db"
        if db_path.exists():
            os.remove(db_path)
            logger.info(f"✅ 删除现有数据库: {db_path}")
        else:
            logger.info("📝 数据库文件不存在，将创建新的")
        
        # 2. 重新初始化数据库
        from database.simple_db import initialize_database
        initialize_database()
        logger.info("✅ 数据库重新初始化完成")
        
        # 3. 验证数据库
        from database.simple_db import get_database_manager
        db = get_database_manager()
        
        # 检查表是否存在
        tables = db.execute_query("SELECT name FROM sqlite_master WHERE type='table'")
        table_names = [table['name'] for table in tables]
        
        logger.info(f"📊 数据库表: {table_names}")
        
        # 检查cameras表结构
        if 'cameras' in table_names:
            columns = db.execute_query("PRAGMA table_info(cameras)")
            logger.info("📋 cameras表结构:")
            for col in columns:
                logger.info(f"  - {col['name']}: {col['type']} {'NOT NULL' if col['notnull'] else 'NULL'}")
        
        return True
        
    except Exception as e:
        logger.error(f"❌ 重建数据库失败: {e}", exc_info=True)
        return False


def add_test_data():
    """添加测试数据"""
    try:
        logger.info("📝 添加测试数据...")
        
        from database.simple_db import get_database_manager
        db = get_database_manager()
        
        # 添加一些基础摄像头数据
        test_cameras = [
            {
                'name': '测试摄像头1',
                'longitude': 116.397128,
                'latitude': 39.916527,
                'location': '北京天安门',
                'status': 'online',
                'ai_enabled': True
            },
            {
                'name': '测试摄像头2', 
                'longitude': 121.473701,
                'latitude': 31.230416,
                'location': '上海外滩',
                'status': 'offline',
                'ai_enabled': False
            }
        ]
        
        for camera in test_cameras:
            insert_query = """
                INSERT INTO cameras (
                    name, longitude, latitude, location, status, ai_enabled, created_at
                ) VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
            """
            db.execute_insert(insert_query, (
                camera['name'], camera['longitude'], camera['latitude'],
                camera['location'], camera['status'], camera['ai_enabled']
            ))
        
        logger.info(f"✅ 添加了 {len(test_cameras)} 个测试摄像头")
        
        # 验证数据
        cameras = db.execute_query("SELECT * FROM cameras")
        logger.info(f"📊 数据库中共有 {len(cameras)} 个摄像头")
        
        return True
        
    except Exception as e:
        logger.error(f"❌ 添加测试数据失败: {e}", exc_info=True)
        return False


def main():
    """主函数"""
    print("🔧 数据库重建工具")
    print("=" * 30)
    print("此工具将:")
    print("1. 删除现有数据库文件")
    print("2. 重新创建数据库表")
    print("3. 添加基础测试数据")
    print("=" * 30)
    
    choice = input("\n是否继续重建数据库? (y/N): ")
    
    if choice.lower() != 'y':
        print("👋 取消操作")
        return
    
    try:
        # 1. 重建数据库
        if not rebuild_database():
            print("❌ 数据库重建失败")
            return
        
        # 2. 添加测试数据
        add_test = input("\n是否添加测试数据? (y/N): ")
        if add_test.lower() == 'y':
            if not add_test_data():
                print("⚠️ 测试数据添加失败，但数据库重建成功")
        
        print("\n🎉 数据库重建完成!")
        print("💡 现在可以重新测试WVP同步功能")
        
    except Exception as e:
        logger.error(f"重建过程中出错: {e}")
        print(f"\n❌ 重建失败: {e}")


if __name__ == "__main__":
    main()